30天的flask-restful終於要告一段落了,今天來談談筆者怎麼接觸flask-restful
本文同步放置於此
由於筆者自己有在記錄金融資訊,如如股價、匯率等,但是都是手動查詢網站在一筆一筆的紀錄在txt內,由於近年來自動化盛行,所以筆者想說也就寫個工具來記錄。
而為什麼挑上flask-restful呢?就如同第一天告訴大家的,flask-restful的簡潔可以讓開發者專注在商業邏輯上的開發,就這樣展開flask-restful之旅。
花了30天介紹flask-restful後再來介紹如何將自動化爬網站整進專案中,所以首先先介紹爬網頁的工具requests。
首先不外乎就是安裝函式庫了,這裡就不廢話了,若是不知道怎麼安裝的請看以下例子。
$ pip install requests
安裝完就可以小試身手了,所以先試試以下例子。
response = requests.get(
'http://www.twse.com.tw/exchangeReport'
'/STOCK_DAY?response=html&date='
+ date + "&stockNo=0050")
這是筆者透過台灣證券交易所公開資訊網站上抓取台灣五十0050的相關資料網頁,透過requests.get可以取得網頁相關內容回傳回來,所以接下來就是要解析response.content的內容了。
因為回來的資訊一定是html,所以接下來要來解析取得的資料,並取得我們所需要的資訊。
除非讀者爬的是api,不過api應該不需要特別去爬。
這裡筆者用來解析取得資料的工具是xml,所以第一步不外乎是安裝lxml了。
這裡不外乎就是透過pip安裝了,如果不熟的讀者請看以下例子:
$ pip install lxml
這部分主要是將上一個步驟所取得的response.content放到lxml內解析產生xml的結構即可,例如以下例子:
html = etree.HTML(response.content)
stockList = []
for item in html.xpath('/html/body/div/table/tbody/tr'):
# item[0].text->日期
# item[3].text->開盤價
# item[4].text->最高價
# item[5].text->最低價
# item[6].text->收盤價
# item[7].text->漲跌價差
# item[1].text->成交股數
# item[2].text->成交金額
# 日期民國轉西元
year = int(item[0].text.split('/')[0]) + 1911
month = int(item[0].text.split('/')[1])
day = int(item[0].text.split('/')[2])
itemDate = datetime.datetime(year, month, day)
if (maxDate < itemDate):
stockList.append(
StockModel(itemDate.strftime('%Y%m%d'), float(item[3].text),
float(item[4].text), float(item[5].text),
float(item[6].text), float(item[7].text),
round(
int(item[1].text.replace(',', '')) / 1000),
round(int(item[2].text.replace(',', '')) / 1000)))
if (len(stockList) > 0):
StockModel.save_list_to_db(stockList)
雖然我們取的xml的結構對我們幫助很大,但是我們只是需要其中的一些資訊,所以這部份透過xpath直接取的我們想要的資料,例如上述例子中我們在乎的是股價相關資訊,而其資料是利用table來存放的,所以我們就透過xpath/html/body/div/table/tbody/tr
取的我們所要的每個column的內容,再來上述例子是將其內容整理最後存放到sqlite內。
由於每一個網站的結構都不一樣,所以想要擷取所需的資料不外乎就是要去了解該網站的結構,知道想要的資料放置於那裡之後再透過xpath選取想要的資料後整理存放到資料庫內,接下來再透過flask-restful實作GET的方法來返還資料給client端,如此就可以自己擁有一個股價api網站了。
30天一轉眼就過了,感謝大家的支持與陪伴讓筆者可以完成這些內容,謝謝各位,還有如果有興趣的話可以參觀筆者的網站喔,網址在這邊。